Challenge #78: Find the Best Housing Markets ~最適な住宅市場を探す~ – Alteryx Weekly Challenge
こんにちは。Alteryxサポートエンジニアとして勉強中のスズです。
当エントリは『Alteryx Weekly Challenge:Intermediate Level Advent Calendar 2018』の24日目です。
- Alteryx Weekly Challenge:Intermediate Level Advent Calendar 2018 - Qiita
- Alteryx Weekly Challenge:Intermediate Level Advent Calendar 2018 | シリーズ | Developers.IO
『Alteryx Weekly Challenge:Intermediate Level Advent Calendar 2018』では、Alteryx Communityで公開されているWeekly ChallengeのIntermediate Levelにひたすら1人で挑戦していきます。
今回は最適な住宅市場を探すに挑戦します。
動作環境
当エントリの執筆には、以下の環境を利用しています。
- Windows 10 Pro
- Alteryx Designer 2018.4.4.54346 英語版
Challenge #78: Find the Best Housing Markets
お題
今回挑戦するお題はこちら。
「Input」側には2つ用意されています。1つ目にはURLが記載されており、アクセスするとデータが表示されます。
2つ目にはデータはありませんが項目名が用意されています。
「Output」側のデータはこちら。
解答の概要
今回作成するワークフローは以下の通りです。
- URLからデータの読み取りと表示
- データを項目ごとに分割
- 項目名の付与と出力の調整
URLからデータの読み取りと表示
Downloadツール(Connectors -> Download)を使用して、URLからデータを取得します。
取得したデータは以下のようになっています。URLから取得したデータは「DownloadData」列に出力されています。
Selectツール(Preparation -> Select)を使用して、不要な列を削除します。
データが1つのセルに出力されているため、Text To Columnsツール(Parse -> Text To Columns)を使用して分割します。Delimiters に \n
を設定し、Split to rows を選択します。
データを分割して表示することができました。
データを項目ごとに分割
Record IDツール(Preparation -> Record ID)でIDを付与したのち、RegExツール(Parse -> RegEx)を2つ使用して必要なデータを抜き出します。
1つ目のRegExツールの Regular Expression には以下の通り設定します。
(\d\d\d) (\d\d\d\d\d) (.*[A-Z|,|\*]) *(\d*) *(\d*) *(\d*) *(\d*) *(\d*)
一部のデータは改行されているため、取りこぼしがあります。取りこぼしを拾うため、2つ目のRegExツールの Regular Expression には以下の通り設定します。
*([A-Z,-]*) *(\d*) *(\d*) *(\d*) *(\d*) *(\d*)
Joinツール(Join -> Join)を使用して、RegExツールで作成した2つのデータを「RecordID」列で結合します。あわせて不要な列を削除します。
また、「RecordID」列の「397」より後は不要なデータとなります。Filterツール(Preparation -> Filter)を使用して、「RecordID」列が「397」以下のデータを抽出します。
今回作成したデータでは、取りこぼしがある場合、1つ下のセルがNullになっています。また、取りこぼしたデータは「Right_」の列に出力されています。
Multi-Row Formulaツール(Preparation -> Multi-Row Formula)を使用して、データを更新します。
「RegExOut3」列の更新には以下の式を設定します。
if isnull([Row+1:RegExOut3]) then [RegExOut3] + " " + [Row+1:Right_RegExOut1] else [RegExOut3] endif
- 1つ下の「RegExOut3」列がNullの場合は「RegExOut3」列と空欄、1つ下の「Right_RegExOut1」列を出力
- それ以外の場合は「RegExOut3」列を出力(更新なし)
「RegExOut4」列の更新には以下の式を設定します。
if isnull([Row+1:RegExOut4]) then [Row+1:Right_RegExOut2] else [RegExOut4] endif
- 1つ下の「RegExOut4」列がNullの場合は「Right_RegExOut2」列を出力
- それ以外の場合は「RegExOut4」列を出力(更新なし)
「RegExOut5」から「RegExOut8」列も同様の処理を行います。
Filterツールで「RegExOut1」列がNullではないデータを抽出し、Selectツールで不要な列を削除します。URLから取得したデータの整形が完了しました。
項目名の付与と出力の調整
整形したデータと「Input」側にある2つ目のデータ(項目名)を、Unionツール(Join -> Union)を使用して結合します。データの結合には Auto Config by Position を使用し、整形したデータの項目名を修正します。
Sortツール(Preparation -> Sort)で「Total」列を降順に並べ替え、Sampleツール(Preparation -> Sample)で上位10件を出力します。結果を確認して完成です。
最後に
今回はWeekly ChallengeのChallenge #78: Find the Best Housing Marketsに挑戦しました。長かったアドベントカレンダーも残すところあと1日となりました。
明日もお楽しみに!
サンプルワークフローのご案内
クラスメソッドでご契約のユーザー様向けに、当ブログでご紹介したワークフローを専用ポータルにて公開しております。当エントリでご紹介したワークフローも公開予定ですので、ご参考にしていただきますと幸いです。
Alteryxの導入なら、クラスメソッドにおまかせください
日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。